package org.qiyu.live.im.core.server.common;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;

/**
 * 编码器 ：用于处理消息的编码过程
 * 作者：無言
 * 时间：2024/12/2 20:38
 * 描述：永无BUG
 */
public class ImMsgEncoder extends MessageToByteEncoder {


    /**
     * netty数据传输的过程需要经过一次编码器的处理
     * @param channelHandlerContext 处理器
     * @param msg 消息实体
     * @param byteBuf 字节缓冲区，最后通过处理器的writeAndFlush方法写入到通道中
     * @throws Exception
     */
    @Override
    protected void encode(ChannelHandlerContext channelHandlerContext, Object msg, ByteBuf byteBuf) throws Exception {
        ImMsg imMsg = (ImMsg) msg;
        byteBuf.writeShort(imMsg.getMagic());
        //编码器中设置值的内容，会与解码器中获取的数据内容相关
        byteBuf.writeInt(imMsg.getCode());
        byteBuf.writeInt(imMsg.getLen());
        byteBuf.writeBytes(imMsg.getBody());
    }
}
